<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // Array.push() ，              
    /*
      特点:
         1.在数组的尾部追加一个成员
         2.会改变原数组
    */ 
    var arr=['张三','李四','王五']
    arr.push('老六')
    console.log(arr);


    // Array.shift() ,
    /*
      特点:
         1.删除数组的第一个成员
         2.返回被删除的成员
         3.会改变原数组
    */ 
    var arr1=[1,2,8,6,4,6,3];
    var first=arr1.shift()
    console.log(first);
    console.log(arr1);

    // Array.reverse() 
    /*
      特点:
          1.用于数组反转
          2.会破坏原数组
    */
    var arr2=[1,2,3,4,5,6]
    console.log(arr2);
    arr2.reverse()
    console.log(arr2);



    /* Array.sort(function(a,b){
      return a-b
    })      
          用于数组的排序
          特点：
            1.会改变原数组
            2.return的值大于0,返回结果为升序
            3.return的值小于0,返回的结果为降序
            4.return的值为0，返回结果不排序
    */

    // return的值大于0,返回结果为升序
    var arr3=[4,9,8,6,7,5,3,66,45]
    arr3.sort(function(a,b){
      return (a-b) * 1
    })
    console.log(arr3);


    // return的值小于0,返回的结果为降序
    arr3.sort(function(a,b){
      return (a-b) * -1
    })
    console.log(arr3);


    // return的值为0，返回结果不排序
    var arr4=[1,5,6,7,5,6]
    arr4.sort(function(a,b){
      return (a-b) * 0
    })
    console.log(arr4);



    // Array.slice()   ,
    
    /*
          特点:
                 1.按照索引值截取数组
                 2.注意：截取的成员，包含start位置的，不包含end位置
                 3.不会改变原数组，返回一个新数组
    */
    //       array.slice(start,end) 
    //          start和end支持负数,最后一个成员的索引值为-1
    //          如果end没有传参则默认是到数组最后一个成员

    var arr=['苹果','香蕉','菠萝','桔子']
    // 1.指定索引值
    console.log(arr.slice(0,2));
    console.log(arr);

    // 2.始终取除了第一个成员之外的数组成员
    console.log(arr.slice(1));

    // 如果slice只有一个参数，则表示从当前索引值截取到末尾
    console.log(arr.slice(2));

    // 3.取出第一个和最后一个以外的数组成员
    console.log(arr.slice(1,-1));


    // 4. 取得倒数的数组成员
    console.log(arr.slice(-4,-1));

    // 5. 清空数组
    console.log(arr.slice(0,0));









    // Array.filter()  筛选符合条件的数据
    /*
      fruit.filter(function(item,index,arr){
            1.item为数组成员
            2.index为成员的索引值
            3.arr 为原数组


            return  (筛选的条件)
        })
          特点：
            1.不会改变原数组，返回新数组
    */

    var fruit=[
        {id:1,name:'哈密瓜',price:5},
        {id:2,name:'榴莲',price:20},
        {id:3,name:'西瓜',price:2},
        {id:4,name:'草莓',price:4},
        {id:5,name:'芒果',price:5},
    ]

    var result=fruit.filter(function(item,index,arr){
      // 筛选单价>=5的记录
      return item.price>=5
    })
    console.log(result);


    var result=fruit.filter(function(item){
      // 筛选水果名称包含'瓜'的记录
      return (item.name).includes('瓜')
    })
    console.log(result);


    // 多条件筛选
    var result = fruit.filter(function(item){
      return (item.name).includes('瓜') && item.price>=5
    })
    console.log(result);


    /* Array.map(function(item){
         return  需要映射的值
        })  
    将return 的值映射到一个新数组中
    不会改变原数组，返回一个新数组
    */
    var stus=[
      {id:1,name:'张三'},
      {id:2,name:'李四'},
      {id:3,name:'王五'},
      {id:4,name:'张三'},
      {id:5,name:'张三'},
    ]

    // var ids=[1,2,3,4,5]

    // 将stus中每一项id的属性值映射到一个新的数组
    var ids= stus.map(function(item){
      return item.id
    })
    console.log(ids);//[1]




    var stus=[
      {id:1,name:'张三'},
      {id:2,name:'李四'},
      {id:3,name:'王五'},
      {id:4,name:'张三'},
      {id:5,name:'张三'},
    ]
    /* 
      Array.find(function(item){
        return 条件
      })
      查找符合条件的单个数组成员
      注意，返回的是数组单个成员，而不是数组
    */
    var stu=stus.find(function(item){
      return item.id===3
    })
    console.log(stu);//{id:3,name:'王五'}


    // find和filter的区别：
    //    1.find返回的是数组成员;
    //      filter返回的是新数组(包含了符合条件的记录)
    //    3.find一旦查找到符合条件的记录,就直接返回该记录;
    //      filter是查找所有符合条件的记录，将记录追加进新数组，返回该新数组
    //    
    // find
    var stu=stus.find(function(item){
      // return item.id===3
      return item.name === '张三'
    })
    console.log(`find:`,stu);//{id:1,name:'张三'}
    
    // filter
    var stu=stus.filter(function(item){
      // return item.id===3
      return item.name === '张三'
    })
    console.log(`filter:`,stu);
    /*[  
        {id:1,name:'张三'}, 
        {id:4,name:'张三'},
        {id:5,name:'张三'}
      ]
      */



    // 用户登录时输入的数据
    var form={
      username:'admin1',
      password:'123456'
    }

    
    var data=[
      {id:1,username:'admin1',password:'123456',nickname:'Tony'},
      {id:2,username:'admin2',password:'123456',nickname:'Jack'},
      {id:3,username:'admin3',password:'123456',nickname:'Bob'},
    ]
    var result=data.find(function(item){
      return item.username === form.username  && 
             form.password=== item.password 
    })
    console.log(result);






    /* 
        Array.some(function(item){
          return  条件
        })
        查找Array中是否有符号条件的成员，有则返回true，否则返回false
    */
    var form={
      username:'admin1',
      password:'1xxx'
    }

    
    var data=[
      {id:1,username:'admin1',password:'123456',nickname:'Tony'},
      {id:2,username:'admin2',password:'123456',nickname:'Jack'},
      {id:3,username:'admin3',password:'123456',nickname:'Bob'},
    ]

   var result = data.some(function(item){
    //  查找是否有匹配的成员，有则返回true，否则返回false
      return item.username === form.username &&
             item.password === form.password
    })
    console.log(result);//false




    // 用户输入的信息
    var form={
      id:4,
      username:'admin1',
      password:'xxxx',
      nickname:'aaa'
    }
    
    var data=[
      {id:1,username:'admin1',password:'123456',nickname:'Tony'},
      {id:2,username:'admin2',password:'123456',nickname:'Jack'},
      {id:3,username:'admin3',password:'123456',nickname:'Bob'},
      // {id:4,username:'admin4',password:'xxxx',nickname:'aaa'},
    ]

    // 判断data中是否有form中的username用户，如果没有则将该记录追加到data中
    var user = data.some(function(item){
      return item.username === form.username
    })
    if(user){
      console.log('该用户已存在');
    }else{
      data.push(form)
    }

    console.log(data);

    
  </script>
</body>
</html>